package cn.silver.module.system.service;

import cn.silver.framework.mybatis.service.IDataService;
import cn.silver.module.system.domain.SysUser;
import cn.silver.module.system.bean.UserBean;
import cn.silver.module.system.param.PasswordParam;
import cn.silver.module.system.param.UserParam;

import java.util.Collection;

/**
 * 用户 业务层
 *
 * @author Silver Zhou
 */
public interface ISysUserService extends IDataService<SysUser,UserParam, UserBean> {

    String init();


    /**
     * 通过用户名查询用户
     *
     * @param userName 用户名
     * @return 用户对象信息
     */
    UserBean selectUserByUserName(String userName);

    /**
     * 通过手机号查询用户
     *
     * @param phonenumber 手机号
     * @return 用户对象信息
     */
    UserBean selectUserByMobile(String phonenumber);


    /**
     * 校验用户名称是否唯一
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean checkUserNameUnique(UserParam user);

    /**
     * 校验手机号码是否唯一
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean checkPhoneUnique(UserParam user);

    /**
     * 校验email是否唯一
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean checkEmailUnique(UserParam user);

    /**
     * 注册用户信息
     *
     * @param user 用户信息
     * @return 结果
     */
    boolean registerUser(UserParam user, String tenantId);


    /**
     * 修改用户状态
     *
     * @param userId 用户ID
     * @param status 帐号状态
     * @return 结果
     */
    int updateUserStatus(String userId, String status);

    /**
     * 修改用户基本信息
     *
     * @param user 用户信息
     * @return 结果
     */
    int updateUserProfile(UserParam user);

    /**
     * 修改用户头像
     *
     * @param userId 用户ID
     * @param avatar 头像地址
     * @return 结果
     */
    boolean updateUserAvatar(String userId, String avatar);

    /**
     * 重置用户密码
     *
     * @param userIds 用户ID
     */
    void resetUserPwd(Collection<String> userIds);

    void updatePwd(PasswordParam param);
}
